{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ***Report 1-交通事故理赔审核***\n",
    "* 刘晚移\n",
    "* 2021260153\n",
    "\n",
    "\n",
    "## 一、任务简介\n",
    "\n",
    "### 1.任务描述\n",
    "\n",
    "* 任务类型：二元分类\n",
    "* 背景介绍：交通摩擦（事故）发生后，理赔员会前往现场勘察、采集信息，这些信息往往影响着车主是否能够得到保险公司的理赔。训练集数据包括理赔人员在现场对该事故方采集的36条信息，信息已经被编码，以及该事故方最终是否获得理赔。我们的任务是根据这36条信息预测该事故方没有被理赔的概率\n",
    "* 数据介绍：训练集中共有200000条样本，预测集中有80000条样本。\n",
    "\n",
    "### 2.数据变量说明\n",
    "\n",
    "* CaseId：案例编号，没有实际意义。\n",
    "* Q1：理赔员现场勘查采集的信息，Q1代表第一个问题的信息。信息被编码成数字，数字的大小不代表真实的关系。\n",
    "* Qk：同上，Qk代表第k个问题的信息。一共36个问题。\n",
    "* Evaluation：表示最终审核结果。0表示授予理赔，1表示未通过理赔审核。在test.csv中，这是需要被预测的标签。\n",
    "\n",
    "### 3.评估方法\n",
    "\n",
    "* 提交结果为每个测试样本未通过审核的概率，也就是Evaluation为1的概率。评价方法为精度-召回曲线下面积(Precision-Recall AUC)，以下简称PR-AUC。 \n",
    "* PR-AUC的取值范围是0到1。越接近1，说明模型预测的结果越接近真实结果。\n",
    "  \n",
    "### 4.任务目标\n",
    "\n",
    "* 编写程序用训练数据进行分类训练得到预测模型，再将测试数据输入该预测模型中进行预测得到预测结果，将预测结果进行评价，尽可能提高预测精度。\n",
    "\n",
    "\n",
    "## 二、任务分析\n",
    "\n",
    "* 求解目标函数是一个NP-hard问题，无法保证得到的就是全局最优解。在经典K-Means聚类算法中采取迭代优化策略，一般包含以下四个步骤：\n",
    "\n",
    "    1.初始化聚类中心；\n",
    "    \n",
    "    2.分配个样本xj到相近的聚类集合，依据是（p!=j）；\n",
    "    \n",
    "    3.根据步骤二结果，更新聚类中心；\n",
    "    \n",
    "    4.若达到最大迭代步数或两次迭代差小于设定的阈值则算法结束，否则重复步骤2。 \n",
    "\n",
    "## 三、算法步骤\n",
    "\n",
    "* 经典的K-means算法在初始化聚类中心时采用的是随机采样的方式，不能保证得到期望的聚类结果，可以选择重复训练多个模型，选取其中表现最好的。但有没有更好的方法呢？David Arthur提出的K-means++算法能够有效的产生初始化的聚类中心。  \n",
    "\n",
    "* 随机初始化一个聚类中心C1，然后通过迭代计算最大概率值X* ，将其加入到中心点中，重复该过程，直到选择k个中心。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.导入所需库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import KMeans\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.读取训练和测试数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "traindata = pd.read_csv(r'train.scv')\n",
    "testdata = pd.read_scv('test.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.去掉没有意义的一列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "traindata.drop('CaseId', axis=1, inplace=True)\n",
    "testdata.drop('CaseId', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.从训练集中分类标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = traindata['Evaluation']\n",
    "traindata.drop('Evaluation', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用K-Means训练模型\n",
    "\n",
    "**KMeans()：** 指要预测的有几个类； 指初始化中心的方法，默认使用的是 方法，而非经典的K-means方法的随机采样初始化，当然你可以设置为 使用随机初始化； 指定使用CPU核心数，-1为使用全部CPU。\n",
    "\n",
    "### 保存预测的结果\n",
    "\n",
    "* 现在可以在运行目录找到这个文件，在比赛网站上可提交查看实际分数。\n",
    "\n",
    "* 使用K-means可能得到的结果没那么理想。在官网上，举办方给出了两个标杆模型，效果最好的是随机森林。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.调用sklearn中的Kmeans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = KMeans(n_clusters=2, init='k-means++', n_jobs=-1)\n",
    "clf.fit(traindata, y)\n",
    "y_pred = clf.predict(testdata)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 四、总结\n",
    "\n",
    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K-means算法是数据挖掘的十大经典算法之一，根据目前结果而言，K-mean精确度不如作为标杆模型的随机森林算法，并且还有优化空间。通过这次任务再次梳理了K-means算法的原理，熟悉了python语句和数据的结构，锻炼了解决问题的思考能力，让我对数据处理问题有了新的认识。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
